package cn.mitool.crypto.codec;

import java.nio.charset.StandardCharsets;

/**
 * Base64
 *
 * @author dragon
 * @version 1.0
 * @date 2024/7/8 17:05
 */
public class Base64 {

    /**
     * Base64编码
     *
     * @param data 数据
     * @return Base64编码字符串
     */
    public static String encode(String data) {
        return encode(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * Base64编码
     *
     * @param data 数据
     * @return Base64编码字符串
     */
    public static String encode(byte[] data) {
        org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64();
        return base64.encodeAsString(data);
    }

    /**
     * Base64解码
     *
     * @param data 数据
     * @return Base64解码字符串
     */
    public static String decode(String data) {
        return decode(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * Base64解码
     *
     * @param data 数据
     * @return Base64解码字符串
     */
    public static String decode(byte[] data) {
        return new String(org.apache.commons.codec.binary.Base64.decodeBase64(data));
    }

    /**
     * Base64Url编码
     *
     * @param data 数据
     * @return Base64Url编码字符串
     */
    public static String urlEncode(String data) {
        return urlEncode(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * Base64Url编码
     *
     * @param data 数据
     * @return Base64Url编码字符串
     */
    public static String urlEncode(byte[] data) {
        return org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(data);
    }

    /**
     * Base64Url解码
     *
     * @param data 数据
     * @return Base64Url解码字符串
     */
    public static String urlDecode(String data) {
        return urlDecode(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * Base64Url解码
     *
     * @param data 数据
     * @return Base64Url解码字符串
     */
    public static String urlDecode(byte[] data) {
        org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64(true);
        return new String(base64.decode(data));
    }

}
